package com.cs.paoyer.administration.web.action;



import com.cs.paoyer.administration.business.AdministrationMngr;
import java.util.Enumeration;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//import java.util.Vector;

import com.cs.paoyer.administration.business.model.UserVO;
import com.cs.paoyer.administration.web.form.UserForm;
//import com.cs.paoyer.common.exception.CommonUserException;
//import com.cs.paoyer.administration.business.client.AdministrationDelegate;

import com.cs.paoyer.common.exception.UserException;
import com.cs.paoyer.common.exception.SystemException;


  
public class LoginAction extends Action  {
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    UserForm loginForm = ( UserForm ) form;
    ActionMessages messages = new ActionMessages();
		//AdministrationDelegate delegate = new AdministrationDelegate();
    AdministrationMngr delegate = new AdministrationMngr();
    
    try
		{
				UserVO user = new UserVO();
				user.setName(loginForm.getName());
				user.setPassword(loginForm.getPassword());
				user = delegate.authenticateUser(user);
        user =  delegate.userGroup(user); //anexa al objeto user la propiedad userGroupCode
        String strMenu = delegate.getMenu(user.getUserGroupCode().toString(), request.getContextPath()); //me obtiene el  menu
        user.setResources(delegate.getResources(user));
        HttpSession session = request.getSession();
        Enumeration atributos = session.getAttributeNames();
        while(atributos.hasMoreElements())
        {
          session.removeAttribute((String)atributos.nextElement());
        }
        session.setAttribute("menu", strMenu); //me guarda el menu en una variable de sesion
				session.setAttribute("userInfo", user);
        session.setMaxInactiveInterval(-1);
    }
		catch (UserException ue) 
		{
				messages.add("msgWarn",  new ActionMessage("loginForm.message."
																			+ ue.getExceptionVO().getId()));
				saveMessages(request, messages);
				//retornamos a la pagina de la que viene el usuario (Login.jsp)
				return mapping.getInputForward();
      
    }
		catch ( SystemException se) 
		{
				messages.add("msgError",  new ActionMessage("loginForm.message."
																			+ se.getExceptionVO().getId()));
				saveMessages(request, messages);
				//retornamos a la pagina de la que viene el usuario (Login.jsp)
				return mapping.getInputForward();
    }   
    
    return mapping.findForward("success");
  }
}